package net.cassite.daf4j.stream;

import net.cassite.daf4j.*;

/**
 * Stream风格的查询,由QueryStream的mapToInt开启.<br>
 * 包含Integer类型的Stream<br>
 * 额外提供sum,average,max,min方法.<br>
 * 此外,若实体未实现SortedEntity,那么将使用构造时传入的DataComparable.asc作排序依据
 *
 * @param <E> 实体类型
 * @see QueryStream#mapToInt(DataComparable)
 * @see DataComparable#asc()
 */
public class QueryIntStream<E> extends QueryNumStreamBase<E, Integer, QueryIntStream<E>> {
        protected QueryIntStream(E entity, DataAccess dataAccess, AndOr andOr, QueryParameter parameter, DataComparable<Integer> intData) {
                super(entity, dataAccess, andOr, parameter, intData);
        }

        /**
         * 执行求和操作
         *
         * @return long类型的求和结果
         */
        public long sum() {
                return DataUtils.executeSumLong(entity, andOr, parameter, data, dataAccess);
        }

        /**
         * 执行求平均值操作
         *
         * @return double类型的平均值结果
         */
        public double average() {
                return DataUtils.executeAvg(entity, andOr, parameter, data, dataAccess);
        }

        /**
         * 执行求最大值操作
         *
         * @return int类型的最大值结果
         */
        public int max() {
                return DataUtils.executeMaxInt(entity, andOr, parameter, data, dataAccess);
        }

        /**
         * 执行求最小值操作
         *
         * @return int类型的最小值结果
         */
        public int min() {
                return DataUtils.executeMinInt(entity, andOr, parameter, data, dataAccess);
        }
}
